home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1996-03-07 | 40.2 KB | 1,267 lines
'************************************************************************** '* MS Test script for Win32s setup program '************************************************************************** '' $DEFINE DEBUG ''Define for script development/debugging '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''Dialog ID's CONST WELCOME16 = 100 CONST WELCOMENT = 101 CONST WELCOME95 = 101 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST BADPATH = 6400 CONST ERRORLOWMEM = 10 CONST ADDSHARE = 250 CONST HELPSHARE = 251 CONST TOOBIG1 = 6301 CONST TOOBIG2 = 6302 CONST LOCOLORRES = 6320 CONST MONOMODE = 6330 CONST WIN95 = 6331 CONST DOSVersionWarn = 6401 CONST HPVersionWarn = 6402 CONST HELPWELCOME = 1000 CONST VERPATH = 1100 CONST EXITFAILNOTWIN31 = 1200 CONST EXITFAILNOTENH = 1300 CONST EXITFAILNOT386 = 1310 CONST EXITFAILLOWMEM = 1311 CONST EXITFAILNOTPAGING = 1325 CONST EXITFAILNOTINTEL = 1350 CONST EXITFAILRUNAPP = 1360 CONST EXITFAILOLE32S = 1361 CONST EXITFAILFOTO = 1362 CONST FREECELLINST = 1400 CONST FREECELLINSTNOWIN32S = 1450 CONST FREECELLPATH = 1500 CONST HELPFREECELL = 1600 CONST HELPFREEPATH = 1601 CONST HELPDOWNLOAD = 1611 CONST DOWNLOADPATH = 1510 ''Bitmap ID CONST LOGO = 1 ''GetTempFileName flags CONST TF_FORCEDRIVE = 128 GLOBAL DESTWIN$ ''Windows directory. GLOBAL DESTSYS$ ''Windows\System directory. GLOBAL DEST32S$ ''Windows\System\Win32s directory GLOBAL DESTFREE$ ''Freecell directory GLOBAL OLE_PROTECT% ''Indicates whether ole2 dlls were protected from being '' copied. GLOBAL OLE_OLEBOOT% GLOBAL VERNUM$ '' Win32s Version Number (i.e., for v1.25 VERNUM$="125" GLOBAL DESTPODW$ ''PhotoWorks directory GLOBAL DESTIMG$ ''Images directory GLOBAL DESTALB$ ''Albums directory GLOBAL DESTSAMP$ ''Sample directory GLOBAL DESTUTIL$ ''Utilities directory GLOBAL FILE1$ GLOBAL FILE2$ GLOBAL FILE3$ GLOBAL FILE4$ GLOBAL FILE5$ GLOBAL FILE6$ GLOBAL FILE7$ GLOBAL FILE8$ GLOBAL ALBUM1Old$ ''Old album #1 GLOBAL ALBUM2Old$ ''Old album #2 GLOBAL ALBUM1New$ ''New album #1 GLOBAL ALBUM2New$ ''New album #2 GLOBAL PageOver$ GLOBAL Pages% GLOBAL Mem% GLOBAL Mem1% GLOBAL KMem GLOBAL BPP% GLOBAL Rows% GLOBAL Cols% GLOBAL FREESPACE GLOBAL PODWDrive$ GLOBAL SHARE% GLOBAL Handle% GLOBAL SHARENAME$ GLOBAL HPDRVRNAME$ GLOBAL OnWindows95% GLOBAL OnWin32s95% DECLARE SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) DECLARE SUB RecoverFromCopy(szFileName$) DECLARE SUB UpdateSystemIni DECLARE FUNCTION RebootSystem(OLEONLY%) AS INTEGER DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER DECLARE FUNCTION IsRunningApp LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION SetCuiFlags LIB "MSCUISTF.DLL" (arg1%, arg2%) AS INTEGER DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER DECLARE FUNCTION GetModuleHandle LIB "KRNL386.EXE" (arg1$) AS INTEGER DECLARE FUNCTION LoadLibrary LIB "KRNL386.EXE" (arg1$) AS INTEGER DECLARE SUB FreeLibrary LIB "KRNL386.EXE" (arg1%) DECLARE FUNCTION SetErrorMode LIB "KRNL386.EXE" (arg1%) AS INTEGER DECLARE FUNCTION GetTempFileName LIB "KRNL386.EXE" (drive%, prefix$, u%, filename$) AS INTEGER DECLARE SUB WriteLine LIB "INIUPD.DLL" (filename$, text$) DECLARE FUNCTION GetTempFileAt(szDir$, szPrefix$) as string DECLARE FUNCTION GetDisplayRows LIB "DISPSTS.DLL" AS INTEGER DECLARE FUNCTION GetDisplayCols LIB "DISPSTS.DLL" AS INTEGER DECLARE FUNCTION GetDisplayBPP LIB "DISPSTS.DLL" AS INTEGER DECLARE FUNCTION GetTotalPhysicalMemory LIB "MEMSTS.DLL" AS LONG DECLARE FUNCTION FRemoveProgmanGroup LIB "MSINSSTF.DLL" (arg1$,arg2%) AS INTEGER DECLARE FUNCTION _lcreat LIB "KRNL386.EXE" (arg1$, arg2%) AS INTEGER DECLARE FUNCTION _lwrite LIB "KRNL386.EXE" (arg1%, arg2$, arg3%) AS INTEGER DECLARE FUNCTION _lclose LIB "KRNL386.EXE" (arg1%) AS INTEGER INIT: CUIDLL$ = "mscuistf.dll" '' Custom user interface dll HELPPROC$ = "FHelpDlgProc" '' Help dialog procedure szOldVer$ ="1.00.000 " '' Reserve space in string for version WIN32ENABLED% = 0 OLEONLY% = 0 OLE2_16% = 0 OLE2AUTO_16% = 0 OLE16RUNAPP% = 0 OLE_PROTECT% = 0 OLE_OLEBOOT% = 0 OnWindows95%=0 SHARE%=0 ON ERROR GOTO ERRNORMAL SrcDir$ = GetSymbolValue("STF_SRCDIR") szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "32sinst.inf" END IF ReadInfFile szInf$ SetBitmap CUIDLL$, LOGO WIN32SVER$ = MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4) SetTitle "Microsoft Win32s version " + WIN32SVER$ + " Setup Program" VERNUM$ = MID$(WIN32SVER$, 1, 1) + MID$(WIN32SVER$, 3 , 2) DESTWIN$ = GetWindowsDir() DESTSYS$ = GetWindowsSysDir() DEST32S$ = DESTSYS + "WIN32S\" OpenLogFile DESTWIN$+"PODW.LOG",0 WinDrive$ = MID$(GetWindowsDir, 1, 1) FREESPACE=GetFreeSpaceForDrive(WinDrive$) GetLocalHardDrivesList "LocalDriveList" NumDrives%=GetListLength("LocalDriveList") Counter%=1 WriteToLogFile "Local Drives List" DriveLoop: DestDrive$=GetListItem("LocalDriveList",Counter%) Counter%=Counter%+1 WriteToLogFile DestDrive$+" :"+str$(GetFreeSpaceForDrive(DestDrive$)) IF (Counter% < (NumDrives%+1)) THEN GOTO DriveLoop ENDIF NumDrives%=GetListLength("LocalDriveList") WriteToLogFile "Local Drives ="+str$(NumDrives%) IF (FREESPACE > (8192 * 1024)) THEN '' Plenty of room DestDrive$=WinDrive$ GOTO SpaceOK ENDIF IF (FREESPACE < (4096 * 1024)) THEN '' Not enough room for Win32s sz$=UIStartDlg(CUIDLL$,TOOBIG1,"FInfo0DlgProc",0,"") ExitCode%=EXITFAILURE GOTO Quit ENDIF IF (NumDrives% < 2) THEN '' Not enough room for PhotoWorks sz$=UIStartDlg(CUIDLL$,TOOBIG2,"FInfo0DlgProc",0,"") ExitCode%=EXITFAILURE GOTO Quit ENDIF Counter%=1 ScanLoop: DestDrive$=GetListItem("LocalDriveList",Counter%) Counter%=Counter%+1 IF ((DestDrive$ <> WinDrive$) AND (GetFreeSpaceForDrive(Drive$) > 5192 * 1024)) THEN GOTO SpaceOK ENDIF IF (Counter% < (NumDrives%+1)) THEN GOTO ScanLoop ENDIF sz$=UIStartDlg(CUIDLL$,TOOBIG2,"FInfo0DlgProc",0,"") ExitCode%=EXITFAILURE GOTO Quit SpaceOK: SetBitmap CUIDLL$, LOGO SetTitle "Microsoft Win32s version " + MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4) + " Setup Program" DESTSYS$ = GetWindowsSysDir() DEST32S$ = DESTSYS + "WIN32S\" DESTWIN$ = GetWindowsDir() WinDrive$ = MID$(GetWindowsDir, 1, 1) FREESPACE=GetFreeSpaceForDrive(WinDrive$) WriteToLogFile "PhotoWorks for Windows version v2.11f" WriteToLogFile "Windows Directory:"+DESTWIN$ WriteToLogFile "System Directory: "+DESTSYS$ WriteToLogFile "Win32 Directory: "+DEST32S$ WriteToLogFile "" WriteToLogFile "Windows Version: "+STR$(GetWindowsMajorVersion)+"."+str$(GetWindowsMinorVersion) WriteToLogFile "Windows Mode: "+STR$(GetWindowsMode) WriteToLogFile "DOS Version: "+STR$(GetDOSMajorVersion)+"."+str$(GetDOSMinorVersion) WriteToLogFile "Windows Drive Free Space = "+str$(FREESPACE/1024)+" KB" IF OnWindowsNT() THEN GOTO SkipVerChk END IF IF (GetDOSMajorVersion < 6) THEN sz$=UIStartDlg(CUIDLL$, DOSVersionWarn, "FInfo0DlgProc", 0, "") UIPop 1 END IF SkipVerChk: '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal WinDrive$ = MID$(GetWindowsDir, 1, 1) IF IsDriveValid(WinDrive$) = 0 THEN i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK) GOTO QUIT END IF '$ENDIF ''DEBUG CHECK: '' Can not run on versions less than 3.10. IF GetWindowsMajorVersion < 3 THEN ExitCode% = EXITFAILNOTWIN31 GOTO QUIT END IF IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 10 THEN ExitCode% = EXITFAILNOTWIN31 GOTO QUIT END IF BPP%=GetDisplayBPP Rows%=GetDisplayRows Cols%=GetDisplayCols KMem=GetTotalPhysicalMemory WriteToLogFile "" WriteToLogFile "Installed Ram = "+STR$(KMem)+"K" WriteToLogFile "Color Depth = "+STR$(BPP%)+" Bits per pixel" WriteToLogFile "Screen Width = "+STR$(Cols%)+" Columns" WriteToLogFile "Screen Height = "+STR$(Rows%)+" Rows" IF (KMem < 3702) THEN sz$ = UIStartDlg(CUIDLL$, ERRORLOWMEM, "FInfoDlgProc", 0, "") IF sz$ = "CONTINUE" THEN UIPop 1 ELSE ExitCode%=EXITFAILURE GOTO QUIT END IF END IF IF ((BPP% < 8) AND (BPP% > 1)) THEN sz$ = UIStartDlg(CUIDLL$, LOCOLORRES, "FInfo0DlgProc", 0, "") UIPop 1 END IF IF (BPP% = 1) THEN sz$ = UIStartDlg(CUIDLL$, MONOMODE, "FInfo0DlgProc", 0, "") UIPop 1 END IF '' Check that we are not running on Chicago, including pre-released '' Chicago versions. IF NOT OnWindowsNT() THEN IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN WriteToLogFile "Chicago or Win 95 installed." OnWindows95%=1 IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion < 395 THEN sz$ = UIStartDlg(CUIDLL$, WIN95, "FInfo0DlgProc", 0, "") UIPop 1 END IF ExitCode% = EXITSUCCESS WIN32ENABLED% = 1 GOTO FREECELL END IF END IF IF GetWindowsMode < 2 THEN IF OnWindowsNT() THEN WriteToLogFile "Non-Intel (RISC) processor found; Win32s was not installed." ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC) ELSE ExitCode% = EXITFAILNOTENH '' Standard Mode Windows END IF GOTO QUIT END IF IF OnWindowsNT() THEN ExitCode% = EXITSUCCESS WIN32ENABLED% = 1 WriteToLogFile "Windows NT was found; Win32s was not installed." GOTO FREECELL END IF ExitCode% = EXITSUCCESS if IsRunningApp() <> 0 THEN WriteToLogFile "Win32s App Running" ExitCode% = EXITFAILRUNAPP GOTO QUIT END IF '' Get version of Win32s to be installed from version info in INF file szNewVer$ = GetSectionKeyVersion("WindowsSystem", "win32s16") '' See if OLE is included. OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists ) IF OLEINCLUDED% = 1 THEN '' See whether one of the OLE 16 bit components is loaded. IF GetModulehandle("compobj") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2prox") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2conv") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("storage") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2nls") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2disp") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("typelib") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF GetOleVersion: szOleNewVer$ = GetSectionKeyVersion("OleWindowsSystemWin32s", "ole2thk") '' Get version of currently installed OLE32 from version info of '' ole2thk file szOleOldVer$ = GetVersionOfFile( DESTSYS$ + "WIN32S\OLE2THK.DLL" ) szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "COMPOBJ.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "compobj") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2PROX.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2prox") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "STORAGE.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "storage") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2CONV.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2conv") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2NLS.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2nls") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2AUTO_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2DISP.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2disp") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2AUTO_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "TYPELIB.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "typelib") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2AUTO_16% = 1 END IF END IF OLE2_32% = OLEINCLUDED% '' Check if Win32s is partially installed sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup") '' If WIN32S.INI specifies Win32s Setup=0, then force complete Win32s file overwrite IF sz$ = "0" THEN GOTO WELCOME END IF '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI IF sz$ <> "1" THEN GOTO WELCOME END IF '' If Win32s is already installed, get running version number i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists ) IF i% = 1 THEN i% = IsWin32sLoaded( szOldVer$ ) ENDIF IF i% = 0 THEN GOTO WELCOME END IF IF szNewVer$ > szOldVer$ THEN GOTO WELCOME END IF IF OLEINCLUDED% = 1 THEN OLE2_32% = 0 IF (szNewVer$ = szOldVer$) OR (szNewVer$ < szOldVer$) THEN '' Compare OLE32 version and versions of each of OLE16 libraries. sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "OLE", "Setup") '' If WIN32S.INI specifies OLE2 Setup=0, then force OLE2 file overwrite IF ((sz$ <> "1") OR (szOleNewVer$ > szOleOldVer$)) THEN OLEONLY% = 1 OLE2_32% = 1 GOTO WELCOME END IF IF OLE2_16% OR OLE2AUTO_16 THEN OLEONLY% = 1 GOTO WELCOME END IF END IF END IF WIN32ENABLED% = 1 GOTO FREECELL WELCOME: i% = SetCuiFlags(OLEONLY%, OLE16RUNAPP%) IF OnWindowsNT() THEN sz$ = UIStartDlg(CUIDLL$, WELCOMENT, "FInfoDlgProc", HELPWELCOME, HELPPROC$) GOTO WELCOMEDONE ENDIF IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN sz$ = UIStartDlg(CUIDLL$, WELCOME95, "FInfoDlgProc", HELPWELCOME, HELPPROC$) GOTO WELCOMEDONE ENDIF sz$ = UIStartDlg(CUIDLL$, WELCOME16, "FInfoDlgProc", HELPWELCOME, HELPPROC$) WELCOMEDONE: IF sz$ = "CONTINUE" THEN UIPop 1 ELSE UIPop 1 GOSUB ASKQUIT GOTO WELCOME END IF GETWIN32SPATH: IF PagingEnabled() = 0 THEN i% = DoMsgBox("Use the Control Panel 386 Enhanced icon and configure Windows using the Virtual Memory option.", "Win32s requires Virtual Memory", MB_TASKMODAL+MB_ICONHAND+MB_OK) ExitCode% = EXITFAILURE '' Enhanced mode but not paging GOTO QUIT END IF IF ShareEnabled() <> 0 THEN SHARE% = 0 GOTO SHAREOK END IF sz$=UIStartDlg(CUIDLL$, ADDSHARE, "FInfoDlgProc", HELPSHARE, HELPPROC$) IF sz$ = "EXIT" THEN ExitCode% = EXITFAILURE GOTO QUIT '' Bail out ELSEIF sz$="CONTINUE" THEN SHARE%=2 '' We'll edit AUTOEXEC.BAT later in this script. ELSE SHARE%=1 '' We'll create an example AUTOEXEC.W32 END IF UIPop 1 SHAREOK: SetSymbolValue "EditTextIn", DESTSYS$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, VERPATH, "FDispDlgProc", HELPWELCOME, HELPPROC$) IF sz$ = "CONTINUE" THEN IF IsDirWritable(DESTSYS$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN UIPop 1 GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO WELCOME ELSE UIPop 1 GOSUB ASKQUIT GOTO GETPATHL1 END IF COPYFILES: IF OLEONLY% = 0 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite END IF IF OLE2_32% = 1 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite END IF '' Indicate Win32s install failure until all files known to be copied. ExitCode% = EXITFAILURE ERR = 0 CreateDir DEST32S$, cmoNone Install OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP% UpdateSystemIni '' Terminate if unhandled fatal error IF ERR <> 0 THEN GOTO QUIT END IF IF OLEONLY% = 0 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite END IF IF OLE2_32% = 1 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Version", szOleNewVer, cmoOverwrite END IF i% = DoMsgBox("Win32s files successfully installed.", "Microsoft Win32s Setup", MB_OK+MB_TASKMODAL) '' Indicate Win32s correctly copied and installed. ExitCode% = EXITSUCCESS FREECELL: SetTitle "Seattle FilmWorks PhotoWorks Setup" IF OLEONLY% = 1 THEN GOTO QUIT ENDIF '' IF WIN32ENABLED% = 1 THEN '' sz$ = UIStartDlg(CUIDLL$, FREECELLINSTNOWIN32S, "FInfoDlgProc",0, "") '' UIPop 1 '' ELSE '' sz$ = UIStartDlg(CUIDLL$, FREECELLINST, "FInfoDlgProc",0, "") '' UIPop 1 '' END IF '' IF sz$ <> "CONTINUE" THEN '' GOTO QUIT '' END IF GETFREEPATH: IF OnWindows95% = 1 THEN DESTFREE$ = DestDrive$ + ":\WIN32APP\FREECELL\" DESTPODW$ = DestDrive$ + ":\PHOTOWKS\" OnWin32s% = 0 ELSEIF OnWindowsNT() THEN DESTFREE$ = DestDrive$ + ":\WIN32APP\FREECELL\" DESTPODW$ = DestDrive$ + ":\PHOTOWKS\" OnWin32s% = 0 ELSE DESTFREE$ = DestDrive$ + ":\WIN32APP\FREECELL\" DESTPODW$ = DestDrive$ + ":\PHOTOWKS\" OnWin32s% = 1 HPDRVRNAME$=FindFileInTree("DESKJETC.DRV",DESTWIN$) IF HPDRVRNAME$="" THEN GOTO NODESKJET ENDIF HPDRVRVERSION$=GetVersionOfFile(HPDRVRNAME$) WriteToLogFile HPDRVRNAME$+" = v"+HPDRVRVERSION$ IF (HPDRVRVERSION$ < "6.1.0.4") THEN sz$=UIStartDlg(CUIDLL$, HPVersionWarn, "FInfo0DlgProc", 0, "") UIPop 1 END IF NODESKJET: ENDIF SetSymbolValue "EditTextIn", DESTPODW$ SetSymbolValue "EditFocus", "END" GETFREEPATHL1: sz$ = UIStartDlg(CUIDLL$, FREECELLPATH, "FEditDlgProc", HELPFREEPATH, HELPPROC$) IF sz$ = "CONTINUE" THEN DESTPODW$ = GetSymbolValue("EditTextOut") IF MID$(DESTPODW$, LEN(DESTPODW$), 1) <> "\" THEN DESTPODW$ = DESTPODW$ + "\" END IF ''Validate new path. IF IsDirWritable(DESTPODW$) = 0 THEN GOSUB BADPATH GOTO GETFREEPATHL1 END IF UIPop 1 GOTO GETDNLDPATH ELSEIF sz$ = "REACTIVATE" THEN GOTO GETFREEPATHL1 ELSEIF sz$ = "EXIT" THEN UIPop 1 GOTO QUIT END IF GETDNLDPATH: DESTDNLD$=DESTPODW$+"DOWNLOAD" SetSymbolValue "EditTextIn", DESTDNLD$ SetSymbolValue "EditFocus", "END" GETDNLDPATHL1: sz$ = UIStartDlg(CUIDLL$, DOWNLOADPATH, "FEditDlgProc", HELPDOWNLOAD, HELPPROC$) IF sz$ = "CONTINUE" THEN DESTDNLD$ = GetSymbolValue("EditTextOut") IF MID$(DESTDNLD$, LEN(DESTDNLD$), 1) <> "\" THEN DESTDNLD$ = DESTDNLD$ + "\" END IF ''Validate new path. IF IsDirWritable(DESTDNLD$) = 0 THEN GOSUB BADPATH GOTO GETDNLDPATHL1 END IF UIPop 1 GOTO COPYFREECELL ELSEIF sz$ = "REACTIVATE" THEN GOTO GETDNLDPATHL1 ELSEIF sz$ = "EXIT" THEN UIPop 1 GOTO QUIT END IF COPYFREECELL: ClearCopyList CreateDir DESTFREE$, cmoNone SrcDir$ = GetSymbolValue("STF_SRCDIR") DESTIMG$=DESTPODW$+"IMAGES" DESTSAMP$=DESTIMG$+"\SAMPLES" DESTALB$=DESTPODW$+"ALBUMS" DESTUTIL$=DESTPODW+"UTILS" CreateDir DESTPODW$, cmoNone CreateDir DESTDNLD$, cmoNone '' CreateDir DESTUTIL$, cmoNone CreateDir DESTIMG$, cmoNone CreateDir DESTALB$, cmoNone CreateDir DESTSAMP$, cmoNone PODWDrive$=MID$(DESTPODW$,1,1) FREESPACE=GetFreeSpaceForDrive(PODWDrive$) WriteToLogFile "PODW Destination: "+DESTPODW$ WriteToLogFile "Album Destination: "+DESTALB$ WriteToLogFile "Image Destination: "+DESTIMG$ WriteToLogFile "Sample Destination: "+DESTSAMP$ WriteToLogFile "Utilities Destination: "+DESTUTIL$ WriteToLogFile "PODW Drive Free Space = "+str$(FREESPACE/1024)+"KB" ERR = 0 IF OnWin32s%=1 THEN AddSectionFilesToCopyList "Freecell", SrcDir$, DESTFREE$ ENDIF AddSectionFilesToCopyList "PODW", SrcDir$, DESTPODW$ '' AddSectionFilesToCopyList "HELP", SrcDir$, DESTPODW$ '' AddSectionFilesToCopyList "SSaver", SrcDir$, DESTPODW$ AddSectionFilesToCopyList "Images", SrcDir$, DESTSAMP$+"\" AddSectionFilesToCopyList "Albums", SrcDir$, DESTALB$+"\" AddSectionFilesToCopyList "Init", SrcDir$, DESTWIN$ '' AddSectionFilesToCopyList "TAC", SrcDir$, DESTUTIL$+"\" CopyFilesInCopyList '' If error copying FreeCell, not a fatal error. Win32s is already installed. IF ERR <> 0 THEN ERR = 0 GOTO QUIT END IF ERR = 0 IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite END IF ERR = 0 FILE1$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File1") FILE2$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File2") FILE3$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File3") FILE4$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File4") FILE5$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File5") '' FILE6$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File6") '' FILE7$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File7") '' FILE8$=DESTSAMP$+"\"+GetSectionKeyFilename("Images","File8") ALBUM1Old$="C:\PHOTOPLS\ALBUMS\"+GetSectionKeyFilename("Albums","File1") ALBUM1New$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File1") ALBUM2Old$="C:\PHOTOPLS\ALBUMS\"+GetSectionKeyFilename("Albums","File2") ALBUM2New$=DESTALB$+"\"+GetSectionKeyFilename("Albums","File2") IF DoesFileExist( DESTWIN$+"WIN.INI", femExists ) THEN IF DoesIniKeyExist (DESTWIN$+"WIN.INI","Extensions","PWP") THEN ELSE CreateIniKeyValue DESTWIN$+"WIN.INI","Extensions","PWP",DESTPODW$+"PODW.EXE",cmoOverwrite EndIf IF DoesIniKeyExist (DESTWIN$+"WIN.INI","Extensions","SFW") THEN ELSE CreateIniKeyValue DESTWIN$+"WIN.INI","Extensions","SFW",DESTPODW$+"PODW.EXE",cmoOverwrite EndIf IF DoesIniKeyExist (DESTWIN$+"WIN.INI","Extensions","ALB") THEN ELSE CreateIniKeyValue DESTWIN$+"WIN.INI","Extensions","ALB",DESTPODW$+"PODW.EXE",cmoOverwrite EndIf EndIf IF DoesFileExist( DESTWIN$+"PODW.INI", femExists ) THEN CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","Version","2.11",cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","Release","Free",cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","Language","English",cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","PODW","New","1",cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Directory","Albums",DESTALB$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Directory","Images",DESTIMG$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","PhotoMail","Download Directory",DESTPODW$+"DOWNLOAD",cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File1",FILE1$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File2",FILE2$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File3",FILE3$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File4",FILE4$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File5",FILE5$,cmoOverwrite '' CreateIniKeyValue DESTWIN$+"PODW.INI","Recent File List","File6",FILE6$,cmoOverwrite IF (KMem > 7800) THEN CreateIniKeyValue DESTWIN$+"PODW.INI","Undo Redo","Buffer","1",cmoOverwrite ELSE CreateIniKeyValue DESTWIN$+"PODW.INI","Undo Redo","Buffer","0",cmoOverwrite END IF END IF CreateIniKeyValue DESTWIN$+"PODW.INI","Modify Album Path","Count","2",cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Modify Album Path","Alb0",ALBUM1Old$+","+ALBUM1New$,cmoOverwrite CreateIniKeyValue DESTWIN$+"PODW.INI","Modify Album Path","Alb1",ALBUM2Old$+","+ALBUM2New$,cmoOverwrite SkipNew: PageOver$=GetIniKeyString(DESTWIN$+"SYSTEM.INI","386Enh","PageOverCommit") IF (PageOver$="") THEN Mem1%=0 ELSE Mem1%=val(PageOver$) END IF IF (Mem1% > 5) THEN GOTO SkipMem END IF IF (KMem > 6000) THEN Mem%=4 ELSE Mem%=6 END IF IF (Mem% < Mem1%) THEN Mem%=Mem1% ENDIF PageOver$=MID$(STR$(Mem%),2,LEN(STR$(Mem%))-1) CreateIniKeyValue DESTWIN$+"SYSTEM.INI","386Enh","PageOverCommit",PageOver$+" ; Modified by PhotoWorks",cmoOverwrite SkipMem: '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Podw",DESTPODW$+"PODW.EXE",cmoOverwrite '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Album",DESTALB$+"\"+"SSaver.alb",cmoOverwrite '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","PWProtected","0",cmoOverwrite '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Titles","1",cmoOverwrite '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Index","1",cmoOverwrite '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","Shuffle","1",cmoOverwrite '' CreateIniKeyValue DESTWIN$+"CONTROL.INI","Screen Saver.PhotoWorks","XPodwWarning","1",cmoOverwrite '' CopyFile DESTPODW$+"SSPODW.EXE",DESTWIN$+"SSPODW.SCR",cmoOverwrite,0 '' If error copying PhotoPlus, not a fatal error. Win32s is already installed. IF ERR <> 0 THEN ERR = 0 GOTO QUIT END IF ERR = 0 IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "PhotoWorks", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "PhotoWorks", "Version", "v2.11f", cmoOverwrite END IF ERR = 0 '' i=FRemoveProgmanGroup ("PhotoWorks v2.11f", cmoNone) CreateProgmanGroup "PhotoWorks v2.11f", "", cmoNone ShowProgmanGroup "PhotoWorks v2.11f", 1, cmoNone CreateProgmanItem "PhotoWorks v2.11f", "PhotoWorks", DESTPODW$ + "PODW.EXE", "", cmoOverwrite CreateProgmanItem "PhotoWorks v2.11f", "PhotoWorks Help", "WINHELP.EXE "+DESTPODW$+"PODW.HLP","", cmoOverwrite '' CreateProgmanItem "PhotoWorks v2.11f", "Freecell", DESTFREE$ + "FREECELL.EXE", "", cmoOverwrite '' CreateProgmanItem "PhotoWorks v2.11f", "Screen Saver", DESTPODW$ + "SSPODW.EXE /s",DESTPODW$ + "SSPODW.EXE,0", cmoOverwrite '' CreateProgmanItem "PhotoWorks v2.11f", "Screen Saver Setup", DESTPODW$ + "SSPODW.EXE /c", DESTPODW$ + "SSPODW.EXE,1", cmoOverwrite IF DoesFileExist(DESTWIN$+"NOTEPAD.EXE",femExists) THEN CreateProgmanItem "PhotoWorks v2.11f", "Readme.Txt", "NOTEPAD.EXE "+DESTPODW$ + "README.TXT","", cmoOverWrite CreateProgmanItem "PhotoWorks v2.11f", "Podw.Log", "NOTEPAD.EXE "+DESTWIN$ + "PODW.LOG","", cmoOverWrite END IF '' Only put up success dialog if icon added to group IF ERR = 0 THEN i% = DoMsgBox("PhotoWorks was sucessfully installed.", "PhotoWorks 2.11f Setup", MB_OK+MB_TASKMODAL) END IF ERR = 0 QUIT: '' Install error handler for final message box routines ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = ExitCode% ELSEIF ERR = STFQUIT THEN IF (OLE_PROTECT% = 1) THEN '' Free all previously loaded libraries FreeLibrary GetModuleHandle("compobj") FreeLibrary GetModuleHandle("ole2") FreeLibrary GetModuleHandle("ole2prox") FreeLibrary GetModuleHandle("ole2conv") FreeLibrary GetModuleHandle("storage") FreeLibrary GetModuleHandle("ole2nls") FreeLibrary GetModuleHandle("ole2disp") FreeLibrary GetModuleHandle("typelib") END IF dlg% = EXITQUIT ExitCode% = EXITQUIT ELSE dlg% = EXITFAILURE ExitCode% = EXITQUIT END IF QUITL1: IF WIN32ENABLED% = 1 THEN UIPop 1 END END IF sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 IF ExitCode% = EXITSUCCESS THEN IF RebootSystem(OLEONLY% and not OLE_OLEBOOT%) = 0 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite IF OLE2_32% = 1 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite END IF i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL) END IF ENDIF END '' Fatal error handler for error message routine ERRQUIT: i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END '' Bypass run-time errors. Let final dialog box display fatal error message. ERRNORMAL: '' Check if user cancelled setup IF ERR = STFQUIT THEN GOTO QUIT END IF RESUME NEXT BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPop 1 UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Builds the copy list and performs all installation operations. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) STATIC SrcDir$ = GetSymbolValue("STF_SRCDIR") '' Use file layout sections that specify OLDER file version/time check IF OLEONLY% = 0 THEN AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$ AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" '' Add obsolete files to be removed AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\" END IF OLE_PROTECT% = 0 OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists ) if OLEINCLUDED% = 1 THEN IF (OLE2_16% = 1) OR (OLE2AUTO_16% = 1) THEN IF OLE16RUNAPP% = 1 THEN '' Force all OLE2 DLLS to be copied during reboot. i% = SetErrorMode(-32768) i% = LoadLibrary(DESTSYS$ + "compobj.dll") i% = LoadLibrary(DESTSYS$ + "ole2.dll") i% = LoadLibrary(DESTSYS$ + "ole2prox.dll") i% = LoadLibrary(DESTSYS$ + "ole2conv.dll") i% = LoadLibrary(DESTSYS$ + "storage.dll") i% = LoadLibrary(DESTSYS$ + "ole2nls.dll") i% = LoadLibrary(DESTSYS$ + "ole2disp.dll") i% = LoadLibrary(DESTSYS$ + "typelib.dll") OLE_PROTECT% = 1 END IF AddSectionFilesToCopyList "OleWindowsSystem", SrcDir$, DESTSYS$ END IF IF OLE2_32% = 1 THEN AddSectionFilesToCopyList "OleWindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" END IF IF (OLE2_16% = 1) OR (OLE2_32% = 1) OR (OLE2AUTO_16% = 1) THEN AddSectionFilesToCopyList "Ole2RegWindowsSystem", SrcDir$, DESTSYS$ END IF IF (OLE2AUTO_16% = 1) THEN AddSectionFilesToCopyList "StdoleWindowsSystem", SrcDir$, DESTSYS$ IF (OLE16RUNAPP and DoesFileExist(DESTSYS$ + "stdole.tlb", femExists) ) THEN ' copy stdole.tlb -> tempfile1 stdole1$ = DESTSYS$ + GetTempFileAt(DESTSYS$, "STD") CopyFile DESTSYS$+"STDOLE.TLB", stdole1$, cmoOverwrit, 0 OLE_OLEBOOT% = 1 ENDIF END IF END IF SetRestartDir GetWindowsDir() CopyFilesInCopyList IF (OLEINCLUDED% = 1) THEN RecoverFromCopy DESTSYS$ + "compobj.dll" RecoverFromCopy DESTSYS$ + "ole2.dll" RecoverFromCopy DESTSYS$ + "ole2prox.dll" RecoverFromCopy DESTSYS$ + "ole2conv.dll" RecoverFromCopy DESTSYS$ + "storage.dll" RecoverFromCopy DESTSYS$ + "ole2nls.dll" RecoverFromCopy DESTSYS$ + "ole2disp.dll" RecoverFromCopy DESTSYS$ + "typelib.dll" END IF IF (OLE_PROTECT% = 1) THEN '' Free all previously loaded libraries FreeLibrary GetModuleHandle("compobj") FreeLibrary GetModuleHandle("ole2") FreeLibrary GetModuleHandle("ole2prox") FreeLibrary GetModuleHandle("ole2conv") FreeLibrary GetModuleHandle("storage") FreeLibrary GetModuleHandle("ole2nls") FreeLibrary GetModuleHandle("ole2disp") FreeLibrary GetModuleHandle("typelib") OLE_PROTECT% = 0 END IF IF (OLE_OLEBOOT% = 1) THEN 'rename new stdole.tlb -> tempfile2 stdole2$ = GetTempFileAt(DESTSYS$, "STD") RemoveFile DESTSYS$+stdole2$, cmoForce RenameFile DESTSYS$+"STDOLE.TLB" , stdole2$ 'rename tempfile1 -> stdole.tlb RenameFile stdole1$, "STDOLE.TLB" 'write to _mssetup.bat: rename tempfile2 to stdole.tlb WriteLine DESTWIN$+"_MSSETUP.BAT", "" WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTSYS$+"STDOLE.TLB" WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTSYS$+stdole2$+" STDOLE.TLB" ENDIF IF OLEINCLUDED% AND (OLE2_16% OR OLE2_32% OR OLE2AUTO_16%) THEN IF OLE16RUNAPP% THEN reg1$ = DESTWIN$ + GetTempFileAt(DESTWIN$, "REG") CopyFile DESTWIN$+"REG.DAT", reg1$, cmoOverwrit, 0 ENDIF RUN "regedit /s " + DESTSYS$ + "ole2.reg" IF OLE16RUNAPP% THEN reg2$ = GetTempFileAt(DESTWIN$, "REG") RemoveFile DESTWIN$ + reg2$, cmoForce RenameFile DESTWIN$ + "REG.DAT" , reg2$ 'rename tempfile1 -> reg.dat RenameFile reg1$, "REG.DAT" 'write to _mssetup.bat: rename tempfile2 to reg.dat WriteLine DESTWIN$+"_MSSETUP.BAT", "" WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTWIN$+"REG.DAT" WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTWIN$ + reg2$+" REG.DAT" OLE_OLEBOOT% = 1 ENDIF END IF END SUB SUB UpdateSystemIni STATIC VxDPath$ = DEST32S$ + "W32S.386" SystemIniPath$ = GetWindowsDir() t% = MakeSystemIni(SystemIniPath$, VxdPath$) END SUB FUNCTION RebootSystem(OLEONLY%) STATIC AS INTEGER ' Check if any files were locked during install. If the RestartList ' is not empty, ExitExecRestart() will restart Windows, cleanup setup ' files, and copy over locked files before Windows restarts. i% = RestartListEmpty() IF i% = 0 THEN ' ExitExecRestart() only returns if applications refuse to be shutdown. ' Win32s is installed but will not operate until Windows is restarted ' and the Win32s VxD is loaded. i% = ExitExecRestart() RebootSystem = 0 ELSE ' If the RestartList list is empty, it is necessary to restart windows ' directly. The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT ' in the restart directory. This program should be exec'd to handle ' proper MSSETUP cleanup (temp files) and restart Windows. IF (OLEONLY% = 1) THEN RebootSystem = 1 ELSE i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" ) RebootSystem = 0 END IF ENDIF END FUNCTION '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION FUNCTION GetTempFileAt(szDir$, szPrefix$) STATIC AS STRING szCurDir$ = CURDIR$ CHDIR szDir$ + "." szTempFile$ = STRING$(144, "E") i% = GetTempFileName(TF_FORCEDRIVE, szPrefix$,0, szTempFile$) CHDIR szCurDir$ GetTempFileAt = MID$(szTempFile$,3) END FUNCTION SUB RecoverFromCopy(szFileName$) STATIC IF DoesFileExist(szFileName$, femExist) = 0 THEN szBackFile$ = MID$(szFileName$, 1, LEN(szFileName$)-3) + VERNUM$ IF DoesfileExist(szBackFile$, femExist) = 0 THEN i% = DoMsgBox("ERROR: Could not find backup file "+szBackfile$, "Setup Error", MB_ICONEXLAMATION + MB_OK) ELSE CopyFile szBackFile$, szFileName$, cmoTimeStamp, 0 END IF END IF END SUB